package cn.tedu.csmall.product.service.impl;

import cn.tedu.csmall.product.ex.ServiceException;
import cn.tedu.csmall.product.mapper.AlbumMapper;
import cn.tedu.csmall.product.pojo.dto.AlbumAddNewDTO;
import cn.tedu.csmall.product.pojo.dto.AlbumUpdateDTO;
import cn.tedu.csmall.product.pojo.entity.Album;
import cn.tedu.csmall.product.pojo.vo.AlbumListItemVO;
import cn.tedu.csmall.product.pojo.vo.AlbumStandardVO;
import cn.tedu.csmall.product.service.IAlbumService;
import cn.tedu.csmall.product.web.ServiceCode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * ClassName: serviceImpl
 * Package: cn.tedu.csmall.product.service.impl
 * Description  处理相册数据的业务实现类
 *
 * @version 0.0.1
 * @Author: 大傻
 * @Create:2022/11/29
 */
@Slf4j
@Service
public class AlbumServiceImpl implements IAlbumService {
    @Autowired
    private AlbumMapper albumMapper;
    public AlbumServiceImpl(){
        log.debug("创建业务对象：AlbumServiceImpl");
    }
    public void addNew(AlbumAddNewDTO albumAddNewDTO){
        log.debug("开始处理添加相册的业务,参数{}",albumAddNewDTO);
        // 【稍后再实现】应该保证此相册的名称是唯一的
        int count = albumMapper.countByName(albumAddNewDTO.getName());
        if(count>0){
                String message = "添加失败,尝试添加的相册名称已被使用!";
                log.debug(message);
            throw new ServiceException(ServiceCode.ERR_CONFLICT,message);
        }  // 创建Album类型的对象
        Album album = new Album();
        // 调用BeanUtils.copyProperties(源对象, 目标对象)将参数的属性值复制到新创建的Album对象中
        BeanUtils.copyProperties(albumAddNewDTO,album);
        // 调用albumMapper的int insert(Album album)方法插入相册数据
        log.debug("即将插入相册数据,参数{}",album);
        albumMapper.insert(album);
    }

    @Override
    public void delete(Long id) {
        log.debug("开始处理根据id删除相册的业务,参数{}",id);
       //检查尝试删除的数据是否存在
        Object queryResult = albumMapper.getStandardById(id);
        if (queryResult ==null){
            String message = "删除相册失败,尝试删除的数据不存在!";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND,message);
        }
        log.debug("接下来即将删除数据,{}",id);
        albumMapper.deleteById(id);
    }

    @Override
    public void updateInfoById(Long id, AlbumUpdateDTO albumUpdateDTO) {
        log.debug("开始处理修改相册基本信息的业务,参数id:{}",id);
       //看看能不能查到数据
        Object queryResult = albumMapper.getStandardById(id);
        if (queryResult ==null){
            String message = "修改相册基本信息失败,尝试修改的相册数据不存在";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND,message);
        }
        //检查数据名称是否冲突
        int count = albumMapper.countByNameAndNotId(id, albumUpdateDTO.getName());
        if (count>0){
            String message = "修改相册基本信息失败,尝试修改的相册名称被占用";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_CONFLICT,message);
        }
        Album album = new Album();
        BeanUtils.copyProperties(albumUpdateDTO,album);
        album.setId(id);
        log.debug("即将修改数据:{}",album);
        albumMapper.update(album);


    }

    @Override
    public AlbumStandardVO getStandardById(Long id) {
        log.debug("开始处理根据id查询相册的业务,参数{}",id);
        AlbumStandardVO queryResult = albumMapper.getStandardById(id);
        if (queryResult==null){
            String message="根基id查询相册详情失败,尝试访问的数据不存在!";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND,message);
        }

        return queryResult;
    }


    @Override
   public List<AlbumListItemVO> list(){
        log.debug("开始处理查询相册列表的业务,参数:无");
        List<AlbumListItemVO> list = albumMapper.list();

        return list;
    }

}
